package Demo;

public class Demo02 {
    /**
     4、类和对象的概念

     面向对象当中最主要“一词”是：对象。

     什么是类？
     类实际上在现实世界当中是不存在的，是一个抽象的概念。
     是一个模板。是我们人类大脑进行“思考、总结、抽象”的一个
     结果。(主要是因为人类的大脑不一般才有了类的概念。)

     类本质上是现实世界当中某些事物具有共同特征，将这些共同
     特征提取出来形成的概念就是一个“类”，“类”就是一个模板。

     明星是一个类

     什么是对象？
     对象是实际存在的个体。（真实存在的个体）

     宋小宝就是一个对象
     姚明就是一个对象
     刘德华就是一个对象
     ....

     宋小宝、姚明、刘德华这3个对象都属于“明星”这个类。

     在java语言中，要想得到“对象”，必须先定义“类”，“对象”是通过“类”
     这个模板创造出来的。
     类就是一个模板：类中描述的是所有对象的“共同特征信息”
     对象就是通过类创建出的个体。

     这几个术语你需要自己能够阐述出来：
     类：不存在的，人类大脑思考总结一个模板（这个模板当中描述了共同特征。）
     对象：实际存在的个体。
     实例：对象还有另一个名字叫做实例。
     实例化：通过类这个模板创建对象的过程，叫做：实例化。
     抽象：多个对象具有共同特征，进行思考总结抽取共同特征的过程。

     类 --【实例化】--> 对象(实例)
     对象 --【抽象】--> 类

     类是一个模板，是描述共同特征的一个模板，那么共同特征包括什么呢？

     潘长江对象：
     名字：潘长江
     身高：165cm

     打篮球：非专业的，自己玩儿呢，无所谓了
     学习：考试80分

     姚明对象：
     名字：姚明
     身高：240cm
     打篮球：NBA专业球员，打篮球非常棒
     学习：考试100分

     共同特征包括哪些？
     名字、身高都属于名词（状态特征）
     打篮球、学习都属于动词（动作特征）

     类 = 属性 + 方法
     属性来源于：状态
     方法来源于：动作

     public class 明星类{
     //属性-->状态，多见于名词
     名字属性;
     身高属性;

     //方法-->动作，多见于动词
     打篮球方法(){

     }
     学习方法(){

     }
     }

     陈赓同学、何伟彬同学，他们俩有没有共同特征呢？
     有共同特征，就可以抽象一个类模板出来。

     可以定义一个学生类（Student）
     public class Student {
     // 属性
     // 姓名
     // 性别
     // 身高

     // 方法
     public .... sing(){

     }
     public .... dance(){

     }
     public .... study(){

     }
     ....
     }

     5、思考：“java软件工程师”在开发中起到的一个作用是什么？

     我们为什么要做软件开发？
     说的大一些是为了人民服务。解决现实生活当中的问题。

     软件开发既然是为了解决现实世界当中的问题，那么首先
     java软件必须能够模拟现实世界。

     其实软件是一个虚拟的世界。
     这个虚拟的世界需要和现实世界一一对应，这才叫模拟。

     6、类的定义
     6.1、怎么定义一个类，语法格式是什么？
     [修饰符列表] class 类名 {
     //类体 = 属性 + 方法
     // 属性在代码上以“变量”的形式存在（描述状态）
     // 方法描述动作/行为
     }

     注意：修饰符列表可以省略。

     6.2、为什么属性是“以”变量的形式存在的？
     假设我们要描述一个学生：
     学生包括哪些属性：
     学号: 110
     姓名："张三"
     性别：'男' (true/false)
     住址："深圳宝安区"
     答案：是因为属性对应的是“数据”，数据在程序中只能放到变量中。
     结论：属性其实就是变量。

     变量的分类还记得吗？
     变量根据出现位置进行划分：
     方法体当中声明的变量：局部变量。
     方法体外声明的变量：成员变量。（这里的成员变量就是“属性”）

     6.3、请大家观察“学生对象1”和“学生对象2”的共同特征，然后再利用java语言
     将该“学生类”表述/表达出来。（这里只表达属性，不表达方法.）

     7、关于编译的过程
     按说应该先编译XueSheng.java，然后再编译XueShengTest.java
     但是对于编译器来说，编译XueShengTest.java文件的时候，会自动
     找XueSheng.class，如果没有，会自动编译XueSheng.java文件，生成
     XueSheng.class文件。
     第一种方式：
     javac XueSheng.java
     javac XueShengTest.java
     第二种方式：
     javac XueShengTest.java
     第三种方式：
     javac *.java

     8、在语法级别上是怎么完成对象创建的呢？
     类名 变量名 = new 类名();
     这样就完成了对象的创建。

     9、什么是实例变量？
     对象又被称为实例。
     实例变量实际上就是：对象级别的变量。
     public class 明星类{
     double height;
     }
     身高这个属性所有的明星对象都有，但是每一个对象都有“自己的身高值”。
     假设创建10个明星对象，height变量应该有10份。
     所以这种变量被称为对象级别的变量。属于实例变量。

     实例变量在访问的时候，是不是必须先创建对象？

     10、对象和引用的区别？
     对象是通过new出来的，在堆内存中存储。
     引用是：但凡是变量，并且该变量中保存了内存地址指向了堆内存当中的对象的。
     * */
}
